package com.kurt.service;

import com.kurt.dto.VehicleDTO;
import com.kurt.dto.create.VehicleCreateRequest;
import com.kurt.dto.query.VehicleQueryRequest;
import com.kurt.dto.update.VehicleUpdateRequest;
import com.kurt.entity.SysVehicle;
import org.springframework.data.domain.Page;

import java.util.List;

/**
 * 车辆服务接口
 * 提供车辆相关的业务逻辑方法
 */
public interface VehicleService extends BaseService<SysVehicle, Long> {

    /**
     * 创建车辆
     *
     * @param createRequest 创建请求
     * @return 车辆信息
     */
    VehicleDTO createVehicle(VehicleCreateRequest createRequest);

    /**
     * 更新车辆
     *
     * @param updateRequest 更新请求
     * @return 车辆信息
     */
    VehicleDTO updateVehicle(VehicleUpdateRequest updateRequest);

    /**
     * 根据ID获取车辆详情
     *
     * @param id 车辆ID
     * @return 车辆信息
     */
    VehicleDTO getVehicleById(Long id);

    /**
     * 分页查询车辆
     *
     * @param queryRequest 查询请求
     * @return 分页结果
     */
    Page<VehicleDTO> getVehiclePage(VehicleQueryRequest queryRequest);

    /**
     * 根据条件查询车辆列表
     *
     * @param queryRequest 查询请求
     * @return 车辆列表
     */
    List<VehicleDTO> getVehicleList(VehicleQueryRequest queryRequest);

    /**
     * 删除车辆
     *
     * @param id 车辆ID
     * @return 是否成功
     */
    boolean deleteVehicle(Long id);

    /**
     * 批量删除车辆
     *
     * @param ids 车辆ID列表
     * @return 是否成功
     */
    boolean deleteVehicles(List<Long> ids);

    /**
     * 根据组织ID获取车辆列表
     *
     * @param organizationId 组织ID
     * @return 车辆列表
     */
    List<VehicleDTO> getVehiclesByOrganizationId(Long organizationId, Long userId);

    /**
     * 检查车牌号是否存在
     *
     * @param licensePlate 车牌号
     * @return 是否存在
     */
    boolean existsByLicensePlate(String licensePlate);

    /**
     * 检查车牌号是否存在（排除指定ID）
     *
     * @param licensePlate 车牌号
     * @param excludeId    排除的车辆ID
     * @return 是否存在
     */
    boolean existsByLicensePlateAndIdNot(String licensePlate, Long excludeId);

    /**
     * 检查SIM卡号是否存在
     *
     * @param simCardNo SIM卡号
     * @return 是否存在
     */
    boolean existsBySimCardNo(String simCardNo);

    /**
     * 检查SIM卡号是否存在（排除指定ID）
     *
     * @param simCardNo SIM卡号
     * @param excludeId 排除的车辆ID
     * @return 是否存在
     */
    boolean existsBySimCardNoAndIdNot(String simCardNo, Long excludeId);

    /**
     * 更新车辆状态
     *
     * @param id     车辆ID
     * @param status 状态
     * @return 是否成功
     */
    boolean updateStatus(Long id, Integer status);

    /**
     * 更新车辆里程
     *
     * @param id      车辆ID
     * @param mileage 里程
     * @return 是否成功
     */
    boolean updateMileage(Long id, java.math.BigDecimal mileage);
}
